import { ICommonParams, IHeaders } from '../../interfaces';
import { close, open } from '../_redis';
import { get_use_info } from './_get-user-info';

/**
 * 当前登录用户对此页面是否有权限查看
 * @param msg 系统参数，fd.data.msg
 * @param headers 系统参数，fd.data.hearders
 * @param productid 项目productid
 * @param clienttype 端点类型，web：3,h5：2,xcx:9
 */
export default async function check(msg: ICommonParams, headers: IHeaders, productid: string, clienttype: string) {
	// 1. 在redis中根据cookie中的sessionid查询用户当前角色可用菜单
	const client = open();
	try {
		const cookie = msg.cookie;
		const sessionid = cookie.sessionid;
		// 2. 如果查询不到结果，需要调用Java服务，根据sessionid获取当前用户所有角色及全部菜单权限，设置其中一个角色「优先使用低级权限」为当前角色。根据当前权限过滤菜单权限，并存储在redis;
		// 如果重新设置了用户权限，当前用户需要重新登陆才能生效
		const user_info = await get_use_info(client, headers.actionid, sessionid, headers.spaceid, productid, clienttype);
		const menus = user_info.menus;
		if (!menus) {
			return { result: false, auth_code: 0 };
		} else {
			const url = msg.url;
			const res = url.match(/.*\/(.*?)\.html/);
			const f_name = (res && res[1]) as string;
			const file_name = decodeURIComponent(f_name) + '.html';
			const check_res = menus.filter((item) => {
				return item.package_url === file_name;
			});
			if (check_res.length === 0) {
				return { result: false, auth_code: 0 };
			} else {
				const auth_code = check_res[0].auth_code;
				return { result: true, auth_code };
			}
		}
	} finally {
		close(client);
	}
}
